/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2008，所有权利保留。
 * 
 * 项目名：	rumba-web
 * 文件名：	UCN.java
 * 模块说明：	
 * 修改历史：
 * May 17, 2008 - zhangyanbo - 创建。
 */
package com.hd123.rumba.gwt.base.client;

import com.hd123.rumba.gwt.base.client.biz.BPersistent;
import com.hd123.rumba.gwt.base.client.exception.ClientBizException;
import com.hd123.rumba.gwt.base.client.util.ObjectUtil;

/**
 * @author zhangyanbo
 * 
 */
public class BUCN extends BPersistent implements BWithUCN {

  private static final long serialVersionUID = 300100L;

  public static final String CLASSNAME = "com.hd123.rumba.gwt.base.client.BUCN";

  public BUCN() {
    super();
  }

  public BUCN(String uuid, String code, String name) {
    this();
    this.uuid = uuid;
    this.code = code;
    this.name = name;
  }

  /**
   * 指定一个实现了BWithUCN接口的数据对象，返回它的BUCN格式版本。允许null，将导致返回null。
   * 
   * @param bucn
   * @return
   */
  public static BUCN getBUCN(BWithUCN bucn) {
    if (bucn == null)
      return null;
    return new BUCN(bucn.getUuid(), bucn.getCode(), bucn.getName());
  }

  /**
   * 返回标准的用户友好字符串，格式为：<i>名称</i>[<i>代码</i>]。
   * 
   * @param ucn
   *            指定一个实现了BWithUCN接口的数据对象。允许null，将导致返回null。
   * @return
   */
  public static String toFriendlyStr(BWithUCN ucn) {
    return toFriendlyStr(ucn, "[]");
  }

  /**
   * 返回标准的用户友好字符串，格式为：<i>名称</i>[<i>代码</i>]。
   * 
   * @param ucn
   *            指定一个实现了BWithUCN接口的数据对象。允许null，将导致返回null。
   * @param emptyStr
   *            指定当代码和名称都为null的时候，返回的字符串。
   * @return
   */
  public static String toFriendlyStr(BWithUCN ucn, String emptyStr) {
    if (ucn == null)
      return emptyStr;
    if (ucn.getCode() == null && ucn.getName() == null)
      return emptyStr;
    StringBuffer sb = new StringBuffer();
    sb.append(ObjectUtil.nvl(ucn.getName(), ""));
    sb.append("[");
    sb.append(ObjectUtil.nvl(ucn.getCode(), ""));
    sb.append("]");
    return sb.toString();
  }

  public BUCN clone() {
    BUCN obj = new BUCN();
    obj.setUuid(uuid);
    obj.setCode(code);
    obj.setName(name);
    return obj;
  }

  @Override
  public void setUuid(String uuid) {
    this.uuid = uuid;
  }

  protected String code;
  protected String name;

  /** 代码 */
  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  /** 名称 */
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getNameCode() {
    return BUCN.toFriendlyStr(this);
  }

  public String toFriendlyStr() {
    return BUCN.toFriendlyStr(this);
  }

  /**
   * 返回标准的用户友好字符串，格式为：<i>名称</i>[<i>代码</i>]。
   * 
   * @param emptyStr
   *            指定当代码和名称都为null的时候，返回的字符串。
   * @return
   */
  public String toFriendlyStr(String emptyStr) {
    return BUCN.toFriendlyStr(this, emptyStr);
  }

  /**
   * 置所有属性为null
   * 
   */
  public void clear() {
    uuid = null;
    code = null;
    name = null;
  }

  public String getReaderClassName() throws ClientBizException {
    throw ClientBizException.neverCallMe();
  }
}
